AMS

AMS 基础

AMS 是什么?

ActivityManagerService 是 Android 系统中一个特别重要的系统服务,也是我们上层 APP 打交道最多的系统服务之一。ActivityManagerService(以下简称 AMS) 主要负责四大组件的启动切换调度以及应用进程的管理调度工作。所有的 APP 应用都需要与 AMS 打交道。

AMS 的启动?

AMS 的启动是在 SystemServer 进程中启动的

Activity 任务栈管理

04y2u

ActivityRecord 用来记录一个 Activity 的所有信息,TaskRecord 中包含一个或多个 ActivityRecord,TaskRecord 用来表示 Activity 任务栈,用来管理栈中的 ActivityRecord;而 ActivityStack 又包含了一个或多个 TaskRecord,它是 TaskRecord 的管理者,ActivityStack 包含一个或多个 TaskRecord。

点击一个 APP 到 View 呈现中间发生了什么?

n4tfr

1、Launcher 进程 start 目标 Activity

Launcher 进程通过 ATMS(ATMSsystem_server 进程) 启动目标 Activity,这个过程涉及了 IPC,通过 binder 机制。
具体通过 Activity/Instrumentatation/ATMS/ActivityStarter/RootWindowContainer 等一串调用链条。

system_server 进程如何启动的?

system_server 进程是 Zygote 进程孵化的第一个 Java 进程,主要用来启动系统的服务,几十个

ATMS 和 AMS 的拆分,ATMS 的作用?

Android10 及以上,AMS 拆分了,将 Activity 相关的转移到了 ATMS 中处理

servicemanager 是如何管理系统服务的 (binder 大总管)?如何启动的(init.rc 启动的)?,管理所有 binder server 服务

2、ATMS 处理:ATMS 处理请求及通过 socket 让 Zygote 进程 fork 一个 App 进程,可选

ATMS 收到启动请求后,交付 ActivityStarter 处理 Intent 和 Flag 等信息,然后交给 ActivityStackSupervisor/ActivityStack 处理 Activity 进栈相关流程;同时以 Socket 方式请求 Zygote 进程 fork 出应用进程。
如果目标 Activity 的进程未启动,ATMS 会请求 Zygote 进程启动需要的应用程序进程。

3、Zygote fork 应用进程 (如何需要的话)

Zygote 进程 fork 出 App 进程,在新进程里反射创建 ActivityThread 对象调用 main,这个就是应用的主线程,在主线程里开启 Looper 消息循环,开始处理创建 Activity。

匿名 Binder,利用 AMS,在 attachApplication 将 ApplicationThread 带给了 AMS,这样 AMS 就可以和 App 进程通信了

Zygote 进程如何启动?作用?
Zygote 进程是 init 进程 fork 启动的,Zygote 进程会启动 Android 虚拟机,加载一些系统资源,fork 出 system_server 进程和应用进程。
为什么通过 Zygote 创建进程的 IPC 不是用 Binder 而是 Socket?

  1. binder 是多线程,fork 不允许多线程,容易出现死锁
  2. 繁琐,要打开 binder 驱动,注册到 ServiceManager 中,AMS 再从 ServiceManager 拿 Zygote 的 binder 代理对象

4、AMS 通过 ApplicationThreadProxy 调用 App 进程的 Activity.onCreate

5、交给 WMS 处理

8all9

AMS 相关面试题

1、从 Activity 创建到 View 呈现中间发生了什么?

https://mp.weixin.qq.com/s?__biz=MzU4NDc1MjI4Mw==&mid=2247483864&idx=1&sn=ca212f527ed4d29e1910d689f2f69b0e&chksm=fd944c2ccae3c53a36432164917d8c1d7d447204e036dd08ffb3d7fea43526ecdc8df87d0668&token=917258391&lang=zh_CN&scene=21#wechat_redirect

2、Activity onStop 延迟 10 秒?

3、ANR 弹框的原理是什么?